package regexp;

import regexp.utils.RegExpFind;

/**
 * @author DCSGO
 * @version 1.0
 * 反向引用
 */
/*
分组、排获、反向引用
1．分组
我们可以用圆括号组成一个比较复杂的匹配模式，
那么一个圆括号的部分我们可以看作是一个子表达式/一个分组。
2.捕获
把正则表达式中子表达式/分组匹配的内容，保存到内存中以数
字编号或显式命名的组里，方便后面引用，从左向右，以分组
的左括号为标志，第一个出现的分组的组号为1，第二个为2，
以此类推。组0代表的是整个正则式
3.反向引用
圆括号的内容被捕获后，可以在这个括号后被使用，从而写出
一个比较实用的匹配模式，这个我们称为反向引用，这种引用
既可以是在正则表达式内部，也可以是在正则表达式外部，内
部反向引用\\分组号，外部反向引用$分组号
 */
public class Regexp12 {
    public static void main(String[] args) {
        //两位相同的数字
        RegExpFind.printFind("112233121314", "(\\d)\\1");
        /*
         * (\d)\1匹配到：
         * 11 22 33
         */

        //五位相同的数字
        RegExpFind.printFind("111112222533333", "(\\d)\\1{4}");
        /*
         * (\d)\1{4}匹配到：
         * 11111 33333
         */

        //个位与千位相同，十位与百位相同
        RegExpFind.printFind("1221131445541111", "(\\d)(\\d)\\2\\1");
        /*
         * (\d)(\d)\2\1匹配到：
         * 1221 4554 1111
         */

        //请在字符串中检索商品编号,形式如:12321-333999111 这样的号码，
        //要求满足前面是一个五位数,然后一个 - 然后是一个九位数,连续的每三位要相同
        String regStr = "\\d{5}-(\\d)\\1{2}(\\d)\\2{2}(\\d)\\3{2}";
        RegExpFind.printFind("12321-333999111", regStr);
        /*
         * \d{5}-(\d)\1{2}(\d)\2{2}(\d)\3{2}匹配到：
         * 12321-333999111
         */
        RegExpFind.printFind("1234-111222333", regStr);
        RegExpFind.printFind("12345-121222333", regStr);
        RegExpFind.printFind("12345-111222332", regStr);
        /*
         * \d{5}-(\d)\1{2}(\d)\2{2}(\d)\3{2}匹配到：
         *
         * \d{5}-(\d)\1{2}(\d)\2{2}(\d)\3{2}匹配到：
         *
         * \d{5}-(\d)\1{2}(\d)\2{2}(\d)\3{2}匹配到：
         *
         *
         * 进程已结束，退出代码为 0
         */

    }
}
